# Hackware Web Services Core

## Overview

Code shared among Hackware Web Services projects.

## Main goals

- Standardize output of JSON based HTTP responses.
- Provide lightweight base class for table based models.
- Centralize common helpers.

## Features

- As consumer I can get JSON based exceptions (instead of HTML based exceptions) out of the box, so that I'm able to process it with a JSON based consumer.
- As consumer I can get a pager with customizable limit on every collection of objects out of the box, so that I'm able to consult massive amounts of data with ease.
- As consumer I can sort every collection of objects in ascending or descending order so that I'm able to work with that functionality out of the box.

Sorry, I owe you a better description for this last 2:
- As programmer I can create a table based model with ease.
- User model, password and passwordless (token) authentication.

## Run it

### Requirements

As it's a Laravel/Lumen 5.8+ package, your server must meet the following requirements:

- PHP >= 7.1.3
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- [Composer](https://getcomposer.org/)

### Installation

```
composer require hackware/hawese-core
```

## Error codes

1. `ModelValidationException`: Failed model attribute validation.
2. `UnknownForeignObjectException`: Can't find the foreign relationship in `model::$foreign_keys`.
3. `ModelObjectNotFoundException`: A model object could not be found based on a key and a value.
4. `WrongCredentialsException`: Wrong login password or secret.
5. `RuntimeException`: Too many failed requests.
6. `RuntimeException`: Unacceptable origin url or HTTP_REFERER, must listed on `cors.default_profile.allow_origins` config.

## Copyright and licensing

Copyright 2019 [Hackware SpA](https://hackware.cl).

This project is released under the MIT License terms. You can sublicense this work. I will greatly appreaciate your contributions back. Releasing your creative works under free licenses makes the world a little better.
